<?php

class Application_Model_CuentasProyectos extends Sgit_Model
{
    protected $_name = 'control_economico_proyectos';
    protected $_primary = 'id';
    protected $_cache_activa = false;

    protected $_allDatos = null;
    protected $_datos = null;
    protected $_categorias = null;

    
    
    function setAnio($anio)
    {
        $this->anio = $anio;
    }

    function setPep($id_pep)
    {
        $this->id_pep = $id_pep;
    }
    
    function setZona($idZona)
    {
        $this->idZona = $idZona;
    }
    

    function setMes($mes)
    {
        $this->mes = $mes;
    }


    function getDatosByCategoria($id_categoria)
    {
        $rows = $this->getDatos();
        return $rows[$id_categoria];
    }


    function getDatosCategoriaMeses($id_categoria, $mes = null)
    {
        
        if(!$this->_cache_datos_categoria[$id_categoria]){//cache
        
            switch($id_categoria)
            {
                case 4:
                    $rows['mes']=$this->getDatosInformeElectricidad($id_categoria);
                    break;
                case 5:
                    $rows['mes']=$this->getDatosInformeAlojamiento($id_categoria);
                    break;  
                case 6:
                    $rows['mes']=$this->getDatosInformeMMR($id_categoria);
                    break;
                case 7:
                    $rows['mes']=$this->getDatosInformeObras($id_categoria);
                    break;   
                default:
                    $rows = $this->getDatosByCategoria($id_categoria);
            }
            $this->_cache_datos_categoria[$id_categoria]=$rows;
        }
        
        if (is_numeric($mes))
            return $this->_cache_datos_categoria[$id_categoria]['mes'][$mes];
        else
            return $this->_cache_datos_categoria[$id_categoria]['mes'];
    }
    
    function getDatosCategoriaMesesForecast($id_categoria, $mes = null)
    {
        
        if(!$this->_cache_datos_categoria[$id_categoria]){//cache
        
            switch($id_categoria)
            {
                case 4:
                    $rows['mes']=$this->getDatosInformeElectricidadForecast($id_categoria);
                    break;
                case 5:
                    $rows['mes']=$this->getDatosInformeAlojamientoForecast($id_categoria);
                    break;   
                    
                case 6:
                    $rows['mes']=$this->getDatosInformeMMRForecast($id_categoria);
                    break;
                case 7:
                    $rows['mes']=$this->getDatosInformeObras($id_categoria);
                    break;   
                    
                    
                default:
                    $rows = $this->getDatosByCategoria($id_categoria);
            }
            $this->_cache_datos_categoria[$id_categoria]=$rows;
        }
        
        if (is_numeric($mes))
            return $this->_cache_datos_categoria[$id_categoria]['mes'][$mes];
        else
            return $this->_cache_datos_categoria[$id_categoria]['mes'];
    }
    
    


    function getCategorias()
    {
        if(!$this->_cache_categorias){//cache
            $select = $this->getAdapter()->select();
            $select->from(array('control_economico_proyectos_categorias'));
            $this->_cache_categorias = $this->getAdapter()->fetchAll($select);
        }
        return $this->_cache_categorias;
    }
    
    function getCategoria($id)
    {
         $rows=$this->assocArray2($this->getCategorias(),'id','nombre');
         
         return $rows[$id];
    }
    


    function getAllDatos($id_categoria = null)
    {

        if (is_null($this->_cache_all_datos)){//cache

            if (is_numeric($this->idZona))
            {
                $select = $this->getAdapter()->select();
                $select->from(array($this->_name), 
                    array(
                    'id', 
                    'id_categoria', 
                    'mes', 
                    'value',
                    'fecha' => new Zend_Db_Expr("IF({$this->_name}.updated_on,{$this->_name}.updated_on,{$this->_name}.created_on)"),
                    'user'  => new Zend_Db_Expr("IF({$this->_name}.updated_by,{$this->_name}.updated_by,{$this->_name}.created_by)")
                ));
                
                $select->where('anio = ?', $this->anio);
                $select->where('id_zona = ?', $this->idZona);
                $select->where('id_pep = ?', $this->id_pep);
               
                $rows = $this->getAdapter()->fetchAll($select);
                $this->_cache_all_datos =(array) $this->assocArray($rows, 'id_categoria');

            } elseif (is_array($this->idZona))
            {
                $select = $this->getAdapter()->select();

                $select->from(array($this->_name), 
                    array(
                    'id', 
                    'id_categoria', 
                    'mes', 
                    'value' => new Zend_Db_Expr("ROUND(SUM(value),2)"),
                    'fecha' => new Zend_Db_Expr("IF({$this->_name}.updated_on,{$this->_name}.updated_on,{$this->_name}.created_on)"),
                    'user'  => new Zend_Db_Expr("IF({$this->_name}.updated_by,{$this->_name}.updated_by,{$this->_name}.created_by)")
                ));
                
                $select->where('anio = ?', $this->anio);
                $select->where('id_zona IN (?)', $this->idZona);
                $select->where('id_pep = ?', $this->id_pep);
                $select->group(array('mes', 'id_categoria'));
                $rows = $this->getAdapter()->fetchAll($select);
                $this->_cache_all_datos = $this->assocArray($rows, 'id_categoria');
            }
        }


        if (is_numeric($id_categoria))
            return $this->_cache_all_datos[$id_categoria];
        else
            return $this->_cache_all_datos;

    }


    function getDatos()
    {
    
        if (is_null($this->_cache_datos)){//cache
            
            
            $anio = $this->anio;
            $idZona = $this->idZona;


            foreach ($this->getCategorias() as $v)
            {
    
                $fila[$v['id']]['categoria'] = $v['nombre'];
    
                $rows = $this->getAllDatos($v['id']);
    
                $series = $this->assocArray2($rows, 'mes');
    
                $fila[$v['id']]['mes'] = $series;
    
                for ($i = 1; $i < 13; $i++)
                {
                    $f[$v['id']]['mes']['acumulado'] += $fila[$v['id']]['mes'][$i]['value'];
                    $fila[$v['id']]['mes'][$i]['acumulado'] = round($f[$v['id']]['mes']['acumulado'], 2);
    
                    $fila[$v['id']]['mes'][$i]['categoria'] = $v['nombre'];
                    $fila[$v['id']]['mes'][$i]['idZona'] = $this->idZona;
                    $fila[$v['id']]['mes'][$i]['anio'] = $this->anio;
                    $fila[$v['id']]['mes'][$i]['mes'] = $i;
                    $fila[$v['id']]['mes'][$i]['id_categoria'] = $v['id'];
 
                    
                }
    
                ksort($fila[$v['id']]['mes']);
            }
            
            $this->_cache_datos=$fila;
        
        }

        return $this->_cache_datos;
    }


    public function getSumaCategorias($categorias, $nombre = '')
    {
        foreach ($categorias as $v)
        {
            $n = $this->getDatosCategoriaMeses($v);

            foreach ($n as $mes => $j)
            {
                $rows[$mes]['categorias'] = $categorias;
                $rows[$mes]['anio'] = $this->anio;
                $rows[$mes]['mes'] = $mes;
                $rows[$mes]['categoria'] = $nombre;
                $rows[$mes]['idZona'] = $this->idZona;
                $rows[$mes]['value'] += $j['value'];
                $rows[$mes]['acumulado'] += $j['acumulado'];

            }
        }
        return $rows;
    }





    public function getDatosInformeElectricidad($id_categoria)
    {
        $imputacion= new Application_Model_InformeElectricidadMensualProyecto();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'imputacion',$this->getCategoria($id_categoria));
    }
    
    public function getDatosInformeElectricidadForecast($id_categoria)
    {
        $imputacion= new Application_Model_InformeElectricidadMensualProyecto();
        return $imputacion->getDatosForecast($this->id_pep,$this->idZona,$this->anio,'imputacion',$this->getCategoria($id_categoria));
    }
    
    
    
    public function getDatosInformeAlojamiento($id_categoria)
    {
        $imputacion= new Application_Model_InformeAlojamientoMensualProyecto();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'imputacion_alojamiento',$this->getCategoria($id_categoria));
    }
    
    public function getDatosInformeAlojamientoForecast($id_categoria)
    {
        $imputacion= new Application_Model_InformeAlojamientoMensualProyecto();
        return $imputacion->getDatosForecast($this->id_pep,$this->idZona,$this->anio,'imputacion_alojamiento',$this->getCategoria($id_categoria));
    }
    
    public function getDatosInformeMMR($id_categoria)
    {
        $imputacion= new Application_Model_InformeMMRMensualProyecto();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'coste',$this->getCategoria($id_categoria));
    }
    
    public function getDatosInformeMMRForecast($id_categoria)
    {
        $imputacion= new Application_Model_InformeMMRMensualProyecto();
        return $imputacion->getDatosForecast($this->id_pep,$this->idZona,$this->anio,'coste',$this->getCategoria($id_categoria));
    }
    
    
    
    public function getDatosInformeObras($id_categoria)
    {
        $imputacion= new Application_Model_InformeObras();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'coste',$this->getCategoria($id_categoria));
    }
    
    
    public function getProgresionElectricidad($id_categoria)
    {
        $imputacion= new Application_Model_InformeElectricidadMensualProyecto();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'imputacion',$this->getCategoria($id_categoria));
    
    }


    public function getProgresionObras($id_categoria)
    {
        $imputacion= new Application_Model_InformeElectricidadMensualProyecto();
        return $imputacion->getDatos($this->id_pep,$this->idZona,$this->anio,'imputacion',$this->getCategoria($id_categoria));
    
    }
    
    
    
 
    

    
    
    
    
    
        

}







